// Inspired by https://github.com/Inndy/vue-clipboard2
const Clipboard = require("clipboard");
if (!Clipboard) {
    throw new Error("you should npm install `clipboard` --save at first ");
}

export default {
    bind(el, binding) {
        if (binding.arg === "success") {
            el._v_clipboard_success = binding.value;
        } else if (binding.arg === "error") {
            el._v_clipboard_error = binding.value;
        } else {
            const clipboard = new Clipboard(el, {
                text() {
                    return binding.value;
                },
                action() {
                    return binding.arg === "cut" ? "cut" : "copy";
                }
            });
            clipboard.on("success", e => {
                const callback = el._v_clipboard_success;
                callback && callback(e); // eslint-disable-line
            });
            clipboard.on("error", e => {
                const callback = el._v_clipboard_error;
                callback && callback(e); // eslint-disable-line
            });
            el._v_clipboard = clipboard;
        }
    },
    update(el, binding) {
        if (binding.arg === "success") {
            el._v_clipboard_success = binding.value;
        } else if (binding.arg === "error") {
            el._v_clipboard_error = binding.value;
        } else {
            el._v_clipboard.text = function() {
                return binding.value;
            };
            el._v_clipboard.action = function() {
                return binding.arg === "cut" ? "cut" : "copy";
            };
        }
    },
    unbind(el, binding) {
        if (binding.arg === "success") {
            delete el._v_clipboard_success;
        } else if (binding.arg === "error") {
            delete el._v_clipboard_error;
        } else {
            el._v_clipboard.destroy();
            delete el._v_clipboard;
        }
    }
};
